package reflect;

import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URISyntaxException;

public class Test3 {
    public static void main(String[] args) throws URISyntaxException, ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException {
        /*
        1.先通过Test3类定位它所在的目录
        2.获取该目录中所有的.class文件，并根据文件名解析出类名
        3.对每个类逐一加载类对象
        4.通过类对象实例化
        5.通过类对象获取其定义的所有方法，并遍历每一个方法
         */
        File dir = new File(Test3.class.getResource(".").toURI());
        String packageName = Test3.class.getPackage().getName();
        File[] subs= dir.listFiles(f ->f.getName().endsWith(".class"));
        for(File sub :subs){
            String fileName = sub.getName();
            String className = fileName.substring(0,fileName.indexOf("."));
            Class cls=Class.forName(packageName+"."+className);
            Object obj=cls.newInstance();

            Method[] methods = cls.getDeclaredMethods();
            for(Method method:methods){
                /*
                String s;
                s.indexof("s")!=-1;
                s.contains("s")
                boolean contains(Stirng s)
                判断当前字符串是否包含给定的字符串s，如果包含则返回true
                 */
                if(method.getName().contains("s")//判断方法名中是否包含字符串s
                    &&method.getParameterCount()==0
                ){
                    method.invoke(obj);
                }
            }
        }
    }
}
